/*
 * Copyright(C),2024-2024, HUTT.Co.Ltd.
 * description: sys_errno.h
 * author : yangxiaosheng
 * date: 2024-05-07 15:46:54
 */

#ifndef SYS_ERRNO_H
#define SYS_ERRNO_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

#define CFG_USE_PRODUCT_C7SE (1)         /* C7SE 产品 */
#define CFG_USE_PRODUCT_C7SE_1_DGREE (1) /* 1°圆盘机型验证 */
#define CFG_USE_SINGLE_DEMO_TEST (0)     /* 单例测试-抓取数据 */
#define CFG_USE_GJ_DEMO_TEST (1)         /* GUOJIAN测试 */
#define CONFIG_USE_OLD_DRV (0)           /* 旧版驱动 */
#define CONFIG_SUPPORT_JIANGUANG_064 (0) /* 支撑建光034风机 */

/* 桩函数 */
#define USE_DBG_STUB (0)
#define USE_DBG_WALK (1)
#define USE_DBG_PHASE (1)
#define USE_DBG_SHIFT (1)
#define USE_DBG_ADJ_PWM (1)             /* 动态匀加速调电机PWM */
#define USE_DBG_AT_CMD (0)              /* 使用AT命令 */
#define USE_DBG_PID_FAN_PRINT (0)       /* 风机PID打印 ，需要先关系统全局打印 topOpr */
#define CFG_USE_ANG_K_100MS (0)         /* 是否使用100ms 采样,如不使用则默认是50ms采样 */
#define CFG_USE_STUB_JLINK_NO_MOTOR (0) /* 仿真时电机不转 */
#define CFG_USE_DBG_GPIO (1)            /* GPIO测时间 */

#define CFG_USE_BYPASS_VAC_BOUND_STUB (1) /* 旁路气压波动检测，科沃斯034气泵不稳定测试桩用 */
#define CFG_USE_BYPASS_FRAME_CHK_STUB (1) /* 旁路气压波动检测，科沃斯034气泵不稳定测试桩用 */
#define CFG_USE_NO_BEEP_SOUND (0)         /* 调试时，蜂鸣器不响 */
/*------------------------------------test------------------------------------*/

typedef unsigned char u8;    //!< Unsigned 8 bit integer
typedef unsigned short u16;  //!< Unsigned 16 bit integer
typedef unsigned long u32;   //!< Unsigned 32 bit integer
typedef char s8;             //!< Signed 8 bit integer
typedef signed short s16;    //!< Signed 16 bit integer
typedef signed long s32;     //!< Signed 32 bit integer

enum ErrNoType {
    ERR_PARA_NULL = 0,
    ERR_OK,
    ERR_INIT_IMU,
    ERR_INIT_KEY,
    ERR_INIT_REMOTE_RCV_MODE,
    ERR_INIT_PARTS_PHASE,
    ERR_INIT_PARTS_SHIFT,
    ERR_INIT_PARTS_WALK,
    ERR_INIT_VAC_INIT_FAIL,
    ERR_SET_LED_PWM,
    ERR_SET_MOTOR_TARGET,
    ERR_IIC_SEMPHR_CREATE,
    ERR_IIC_SEMPHR_GET,
    ERR_PRESSURRE_SOFT_RST,
    ERR_ALREADY_INIT,
    ERR_IN_PARA_INVALID,

    ERR_GET_ALPHA_SHIFT_TBL,
    ERR_GET_ALPHA_MOV_TBL,
    ERR_IMU_READ_REG,
    ERR_BEST_MTD_ANG_IS_ALREADY_ZERO,

    ERR_STA_PROCESSING,
    ERR_STA_STOP,
    ERR_SET_FUNC,

    ERR_BUT,
};

#define LOG_LVL_ERR (0)
#define LOG_LVL_INFO (1)
#define LOG_LVL_DGB (2)

/* 打印级别设定 */
#define LOG_LVL (LOG_LVL_INFO)

#if LOG_LVL >= LOG_LVL_ERR
#define PRINT_ERR(fmt, ...)                                                  \
    do {                                                                     \
        printf("ERROR:[%s\t](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
    } while (0)
#else
#define PRINT_ERR(fmt, ...)
#endif

#if LOG_LVL >= LOG_LVL_INFO
#define PRINT_INFO(fmt, ...)        \
    do {                            \
        printf(fmt, ##__VA_ARGS__); \
    } while (0)
#else
#define PRINT_INFO(fmt, ...)
#endif

#if LOG_LVL >= LOG_LVL_DGB
#define PRINT_DBG(fmt, ...)                                            \
    do {                                                               \
        printf("[%s\t](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
    } while (0)
#else
#define PRINT_DBG(fmt, ...)
#endif

#define PRINT_ERR_LOG(cond, fmt, ...)                                          \
    do {                                                                       \
        if (cond) {                                                            \
            printf("ERROR:[%s](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
        };                                                                     \
    } while (0)
#define PRINT_ERR_RET(cond, ret, fmt, ...)                                     \
    do {                                                                       \
        if (cond) {                                                            \
            printf("ERROR:[%s](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
            return ret;                                                        \
        };                                                                     \
    } while (0)
#define PRINT_ERR_RET_VOID(cond, fmt, ...)                                     \
    do {                                                                       \
        if (cond) {                                                            \
            printf("ERROR:[%s](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
            return;                                                            \
        };                                                                     \
    } while (0)

#define PRINT_INFO_RET(cond, ret, fmt, ...)                              \
    do {                                                                 \
        if (cond) {                                                      \
            printf("[%s](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
            return ret;                                                  \
        };                                                               \
    } while (0)
#define PRINT_INFO_RET_VOID(cond, fmt, ...)                              \
    do {                                                                 \
        if (cond) {                                                      \
            printf("[%s](%d)\t" fmt, __func__, __LINE__, ##__VA_ARGS__); \
            return;                                                      \
        };                                                               \
    } while (0)
#define PRINT_DBG_RET(cond, ret, fmt, ...)      \
    do {                                        \
        if (cond) {                             \
            PRINT_DBG("\t" fmt, ##__VA_ARGS__); \
            return ret;                         \
        };                                      \
    } while (0)
#define IF_RETURN(cond, ret) \
    do {                     \
        if (cond) {          \
            return ret;      \
        };                   \
    } while (0)
#define IF_RETURN_VOID(cond) \
    do {                     \
        if (cond) {          \
            return;          \
        };                   \
    } while (0)

#ifdef __cplusplus
}
#endif

#endif /* SYS_ERRNO_H */
